package ufc.si.fbd.logica.dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import ufc.si.fbd.logica.ConnectionFactory;
import ufc.si.fbd.logica.entidades.Participante;

public class ParticipanteDAO {

    public void salvar(Participante participante) throws SQLException {
        Connection conexao = ConnectionFactory.getConnection();
        String sql;
        PreparedStatement ps;
        if (participante.getId() == 0) {
            sql = "INSERT INTO participantes (cpf, nome, data_nasc, endereco, cidade, uf, cep, email, telefone) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
            ps = conexao.prepareStatement(sql);
            ps.setString(1, participante.getCpf());
            ps.setString(2, participante.getNome());
            ps.setDate(3, new Date(participante.getDataNacimento().getTime()));
            ps.setString(4, participante.getEndereco());
            ps.setString(5, participante.getCidade());
            ps.setString(6, participante.getUf());
            ps.setString(7, participante.getCep());
            ps.setString(8, participante.getEmail());
            ps.setString(9, participante.getTelefone());
            ps.executeUpdate();
        } else {
            sql = "UPDATE participantes SET cpf=?, nome=?, data_nasc=?, endereco=?, cidade=?, uf=?, cep=?, email=? WHERE id=?";
            ps = conexao.prepareStatement(sql);
            ps.setString(1, participante.getCpf());
            ps.setString(2, participante.getNome());
            ps.setDate(3, new Date(participante.getDataNacimento().getTime()));
            ps.setString(4, participante.getEndereco());
            ps.setString(5, participante.getCidade());
            ps.setString(6, participante.getUf());
            ps.setString(7, participante.getCep());
            ps.setString(8, participante.getEmail());
            ps.setInt(9, participante.getId());
            ps.setString(9, participante.getTelefone());
            ps.executeUpdate();
        }
        conexao.close();
    }

    public int find(String cpf) throws SQLException{
        Connection conexao = ConnectionFactory.getConnection();
        String sql = "SELECT id FROM participantes WHERE cpf = ?";
        PreparedStatement ps = conexao.prepareStatement(sql);
        ps.setString(1, cpf);
        ResultSet result = ps.executeQuery();
        int id = 0;
        while (result.next()) {
            id = result.getInt("id");
        }
        return id;
    }
    
    public List<Participante> listar(String string) throws SQLException {
        Connection conexao = ConnectionFactory.getConnection();
        String sql = "SELECT * FROM participantes WHERE nome ILIKE ?";
        PreparedStatement ps = conexao.prepareStatement(sql);
        ps.setString(1, string);
        List<Participante> participantes = new ArrayList<Participante>();
        ResultSet result = ps.executeQuery();
        while (result.next()) {
            int id = result.getInt("id");
            String cpf = result.getString("cpf");
            String nome = result.getString("nome");
            Date data_nasc = result.getDate("data_nasc");
            String endereco = result.getString("endereco");
            String cidade = result.getString("cidade");
            String uf = result.getString("uf");
            String cep = result.getString("cep");
            String email = result.getString("email");
            String tel = result.getString("telefone");
            Participante participante = new Participante(id, cpf, nome, data_nasc, endereco, cidade, uf, cep, email, tel);
            participantes.add(participante);
        }
        conexao.close();
        return participantes;
    }

    public Participante find(int id) throws SQLException {
        Connection conexao = ConnectionFactory.getConnection();
        String sql = "SELECT * FROM participantes WHERE id = ?";
        PreparedStatement ps = conexao.prepareStatement(sql);
        ps.setInt(1, id);
        Participante participante = new Participante();
        ResultSet result = ps.executeQuery();
        while (result.next()) {
            participante.setId(result.getInt("id"));
            participante.setCpf(result.getString("cpf"));
            participante.setNome(result.getString("nome"));
            participante.setDataNacimento(result.getDate("data_nasc"));
            participante.setEndereco(result.getString("endereco"));
            participante.setCidade(result.getString("cidade"));
            participante.setUf(result.getString("uf"));
            participante.setCep(result.getString("cep"));
            participante.setEmail(result.getString("email"));    
            participante.setTelefone(result.getString("telefone"));
        }
        conexao.close();
        return participante;
    }

    public void remover(int id) throws SQLException {
        Connection conexao = ConnectionFactory.getConnection();
        String sql = "DELETE FROM participantes WHERE id = ?";
        PreparedStatement ps = conexao.prepareStatement(sql);
        ps.setInt(1, id);
        ps.executeUpdate();
        conexao.close();
    }
}
